function [XbetaFixed] = calc_Xbeta_fixed(data, paramsParts)
	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	% This function computes the part of the utility from Xparts that do not include (tk)-levels, and sum them up.
	% This is useful for dynamic data generation, because tk-covariates include functions of lagged Y's.
	% Thus, this function computes the part of the utility that will not be impacted by the lagged Y's drawn.
	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	%%%%% Inputs:
	% data:						object
	%	.consumerAdoptions:			object  --> data object from consumerAdoptions submodel
	%	.providerAdoptions:			object  --> data object from providerAdoptions submodel
	%	.providerExits:				object  --> data object from providerExits submodel
	%
	% paramsParts:				object
	%	.consumerAdoptions:			cell(NumParts,1)
	%	.providerAdoptions:			cell(NumParts,1)
	%	.providerExits:				cell(NumParts,1)
	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	%%%%% Outputs:
	% XbetaFixed:				object:
	%	.consumerAdoptions:			K1 x K2 x T
	%	.providerAdoptions:			K x T
	%	.providerExits:				K x T
	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

	% Get dimensions
	T = data.providerAdoptions.dims.dims1{2};
	K = data.providerAdoptions.dims.dims1{3};	
	K1 = data.consumerAdoptions.dims.dims1{5};
	K2 = data.consumerAdoptions.dims.dims1{6};
	
	%%%%% providerAdoptions
	NumParts = length(data.providerAdoptions.Xparts);
	Xbeta_parts = cell(NumParts, 1);
	for ii = 1:NumParts
		Xbeta_parts{ii} = compute_Xbeta_part(data.providerAdoptions.Xparts{ii}, paramsParts.providerAdoptions{ii});
	end
	% Set those parts that depend on installed base equal to zero so they don't play a role on V_invariant
	Xbeta_parts{1}(:) = 0;
	
	% Combine various parts together
	XbetaFixed.providerAdoptions = combine_Xbeta_parts_dim2(data.providerAdoptions.dims, Xbeta_parts); % (T*K) x 1
	XbetaFixed.providerAdoptions = reshape(XbetaFixed.providerAdoptions, [T K])'; % K x T
	clear NumParts Xbeta_parts;
	
	
	%%%%% providerExits
	NumParts = length(data.providerExits.Xparts);
	Xbeta_parts = cell(NumParts, 1);
	for ii = 1:NumParts
		Xbeta_parts{ii} = compute_Xbeta_part(data.providerExits.Xparts{ii}, paramsParts.providerExits{ii});
	end
	% Set those parts that depend on installed base equal to zero so they don't play a role on V_invariant
	Xbeta_parts{1}(:) = 0;
	
	% Combine various parts together
	XbetaFixed.providerExits = combine_Xbeta_parts_dim2(data.providerExits.dims, Xbeta_parts); % (T*K) x 1
	XbetaFixed.providerExits = reshape(XbetaFixed.providerExits, [T K])'; % K x T
	clear NumParts Xbeta_parts;
	
	
	%%%%% consumerAdoptions
	NumParts = length(data.consumerAdoptions.Xparts);
	Xbeta_parts = cell(NumParts, 1);
	for ii = 1:NumParts
		Xbeta_parts{ii} = compute_Xbeta_part(data.consumerAdoptions.Xparts{ii}, paramsParts.consumerAdoptions{ii});
	end
	% Set those parts that depend on installed base equal to zero so they don't play a role on V_invariant
	Xbeta_parts{2}(:) = 0;
	Xbeta_parts{3}(:) = 0;
	
	% Combine various parts together
	XbetaFixed.consumerAdoptions = combine_Xbeta_parts_dim3(data.consumerAdoptions.dims, Xbeta_parts); % (T*K1*K2) x 1
	XbetaFixed.consumerAdoptions = reshape(XbetaFixed.consumerAdoptions, [T K1 K2]); % T x K1 x K2
	XbetaFixed.consumerAdoptions = permute(XbetaFixed.consumerAdoptions, [2 3 1]); % K1 x K2 x T
	clear NumParts Xbeta_parts;
end
